// 该文件为创建整个应用的路由器
import VueRouter from "vue-router"
// 系统设置
import SystemConfig from '@common/system/SystemConfig'
import store from '../store'


// 路由规则定义
const routes = [
    // 默认重定向到登录页面
    {
        path: '/',
        redirect: '/index'
    },
    // 登录
    {
        name: 'login',
        path: '/login',
        component: () => import('@pages/Login')
    },

    // 注册
    {
        name: 'register',
        path: '/register',
        component: () => import('@pages/Register')
    },

    // 后台页面
    {
        name: 'home',
        path: '/index',
        component: () => import('@pages/Index'),
        // 重定向到dashboard页面
        redirect: '/dashboard',
        // 二级路由
        children: [
            // Dashboard页面
            {
                name: 'dashboard',
                path: '/dashboard',
                // 组件注册的第三种方式import导入（推荐使用）
                component: () => import('@pages/Dashboard')
            },
            // 系统设置
            {
                name: 'systemConfig',
                path: '/systemConfig',
                // 主键注册的第一种方式，先import，再定义
                component: SystemConfig
            },

            // 报表处理
            {
                name: 'report',
                path: '/report',
                // 组件注册的第二种方式，require导入（推荐使用）
                // 可使用箭头函数简写：component:resolve = >require(['@report/Report'], resolve)
                component(resolve) {
                    require(['@report/Report'], resolve)
                }
            },

            // 票据信用信息披露
            {
                name: 'disclosure',
                path: '/disclosure',
                component: () => import('@disclosure/Disclosure')
            },

            // 测试节点
            {
                name: 'helloWorld',
                path: '/helloWorld',
                component: () => import('@test/HelloWorld')
            },

            // 404页面
            { 
                name: 'notfound',
                path: '/notfound', 
                component: () => import('@common/error/NotFound'),
                meta: {title: '页面走丢了~'}
            },

        ]
    },
]

// 创建路由器
const router = new VueRouter({
    mode: 'hash', // 可选 history|hash
    routes: routes,// 路由规则
})

// 路由守卫拦截处理（路由切换之前执行）
// 全局前置守卫beforeEach(NavigationGuard<Vue>)
// to: Route: 即将要进入的目标 路由对象
// from: Route: 当前导航正要离开的路由
// next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。
router.beforeEach((to, from, next) => {
    // 未登录跳转到登录页
    if (!whiteList(to.path) && !isToken()) {
        return router.push({ path: '/login' }).catch(err=>err)
    }
    // 登录的情况直接跳转到首页
    if ('/login' == to.path && isToken()) {
        return router.push({ path: '/index' }).catch(err=>err)
    }
    next()
})

// 全局后置钩子
router.afterEach((to, from) => {

})

/**
 * 白名单
 * @param {string} path 
 * @returns 
 */
function whiteList(path) {
    return new Array('/login','/register').includes(path) 
}

/**
 * 是否已有token
 * @returns Boolean
 */
function isToken() {
    return store.state.token || sessionStorage.getItem('token');
}

export default router